package com.istabs;

import java.util.Arrays;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.istabs.beans.Categoria;
import com.istabs.beans.Establecimiento;
import com.istabs.services.DirectorioService;

public class ListaTipoEstablecimientosActivity extends ListActivity {
	private Categoria[] categorias;
	private TipoEstablecimientoAdapter tipoEstablecimientoAdapter;
	private ProgressDialog dialog;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lista_tipo_establecimientos);
		try {
			Object[] serializableExtra = (Object[]) this.getIntent()
					.getSerializableExtra("categorias");
			this.categorias = new Categoria[serializableExtra.length];
			for (int i = 0; i < serializableExtra.length; i++) {
				this.categorias[i] = (Categoria) serializableExtra[i];
			}
			tipoEstablecimientoAdapter = new TipoEstablecimientoAdapter(this,
					R.layout.directorio_item,
					R.id.txtNombreCategoriaEstablecimiento, categorias);
			setListAdapter(tipoEstablecimientoAdapter);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private class TipoEstablecimientoAdapter extends ArrayAdapter<Categoria> {

		public TipoEstablecimientoAdapter(Context context, int layoutId,
				int textViewResourceId, Categoria[] objects) {
			super(context, layoutId, textViewResourceId, objects);
			// TODO Auto-generated constructor stub
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view = super.getView(position, convertView, parent);
			TextView tv = (TextView) view
					.findViewById(R.id.txtNombreCategoriaEstablecimiento);
			tv.setText(getItem(position).getNombre());
			return view;
		}
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		final RequestTask t = new RequestTask();
		dialog = ProgressDialog.show(this, "Istabs",
				"Cargando.\n Por favor espere...", true, true,
				new OnCancelListener() {

					public void onCancel(DialogInterface dialog) {
						t.cancel(true);
					}
				});
		t.execute(tipoEstablecimientoAdapter.getItem(position).getId());
	}

	private class RequestTask extends
			AsyncTask<Integer, Integer, Establecimiento[]> {
		private Intent intent;

		protected Establecimiento[] doInBackground(Integer... ids) {
			DirectorioService service = new DirectorioService();
			try {
				intent = new Intent(ListaTipoEstablecimientosActivity.this,
						ListaEstablecimientosPorTipoActivity.class);
				return service.obtenerEstablecimientos(ids[0].toString());

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}

		}

		protected void onProgressUpdate(Integer... progress) {

		}

		protected void onPostExecute(Establecimiento[] result) {
			if (result != null) {

				intent.putExtra("establecimientos", result);
				startActivity(intent);
				dialog.dismiss();
			} else {
				dialog.dismiss();
				// prepare the alert box
				AlertDialog.Builder alertbox = new AlertDialog.Builder(
						ListaTipoEstablecimientosActivity.this);
				// set the message to display
				alertbox.setMessage("Error al cargar los eventos. Intente mas tarde");
				alertbox.show();
			}

		}
	}

}